home *** CD-ROM | disk | FTP | other *** search
/ Mac Power 1997 January / macpower199701.bin / AMUG / Programming_10 / WASTE 1.3a1.sit / WASTE 1.3a1 Distribution / Demo / WEDemoInit.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-08-23  |  4.1 KB  |  200 lines  |  [TEXT/CWIE]

  1. /*
  2.     WASTE Demo Project:
  3.     Initialization and Finalization Routines
  4.  
  5.     Copyright ゥ 1993-1996 Marco Piovanelli
  6.     All Rights Reserved
  7.  
  8.     C port by John C. Daub
  9. */
  10.  
  11.  
  12. #ifndef __DIALOGS__
  13. #include <Dialogs.h>
  14. #endif
  15.  
  16. #ifndef __FONTS__
  17. #include <Fonts.h>
  18. #endif
  19.  
  20. #ifndef __CODEFRAGMENTS__
  21. #include <CodeFragments.h>
  22. #endif
  23.  
  24. #ifndef __GESTALT__
  25. #include <Gestalt.h>
  26. #endif
  27.  
  28. #ifndef __SCRAP__
  29. #include <Scrap.h>
  30. #endif
  31.  
  32. #ifndef __TEXTSERVICES__
  33. #include <TextServices.h>
  34. #endif
  35.  
  36. #ifndef __WEDEMOAPP__
  37. #include "WEDemoIntf.h"
  38. #endif
  39.  
  40. #include "WEObjectHandlers.h"
  41.  
  42. OSErr Initialize( void )
  43. {
  44.     SInt32            response;
  45.     SInt16            i;
  46.     OSErr            err;
  47.  
  48.     // expand the zone to its maximum size
  49.  
  50.     MaxApplZone( );
  51.  
  52.     // allocate some extra master pointer blocks
  53.  
  54.     for ( i = 0; i < 6; i++ )
  55.     {
  56.         MoreMasters( );
  57.     }
  58.  
  59.     // initialize the Toolbox
  60.  
  61.     InitGraf( &qd.thePort );
  62.     InitFonts( );
  63.     InitWindows( );
  64.     InitMenus( );
  65.     TEInit( );    // tho we use WASTE for text stuff, dialogs, etc all use TextEdit so don't remove this!
  66.     InitDialogs( nil );
  67.     InitCursor( );
  68.     FlushEvents( everyEvent, 0 );
  69.  
  70.     // if desk scrap is too large, unload it
  71.  
  72.     if ( InfoScrap( )->scrapSize > kScrapThreshold )
  73.     {
  74.         UnloadScrap( );
  75.     }
  76.  
  77.     // make sure system software version is 7.0 or newer (classic 68K only)
  78.  
  79.     #if !GENERATINGCFM
  80.     if ( ( Gestalt( gestaltSystemVersion, &response ) != noErr ) || ( response < kMinSystemVersion ) )
  81.     {
  82.         SetCursor( &qd.arrow );
  83.         response = Alert( kAlertNeedSys7, nil );
  84.         return -1;
  85.     }
  86.     #endif
  87.  
  88.     // make sure WASTELib got linked and we're using version 1.3a1 or newer
  89.     #if GENERATINGCFM
  90.     if ( ( UInt32) & WEVersion == kUnresolvedCFragSymbolAddress )
  91.         response = 0;
  92.     else
  93.     #endif
  94.         response = WEVersion ( ) ;
  95.  
  96.     if ( response < kMinWASTEVersion )
  97.     {
  98.         SetCursor ( & qd . arrow ) ;
  99.         response = Alert ( kAlertNeedNewerWASTE, nil ) ;
  100.         return -1 ;
  101.     }
  102.  
  103.     // determine whether color Quickdraw is available
  104.  
  105.     gHasColorQD = (Gestalt(gestaltQuickdrawVersion, &response) == noErr)
  106.                     && (response >= gestalt8BitQD);
  107.  
  108.     // determine whether the Drag Manager is available
  109.  
  110.     gHasDragAndDrop = (Gestalt( gestaltDragMgrAttr, &response ) == noErr )
  111.                     && BTST( response, gestaltDragMgrPresent );
  112.  
  113. #if GENERATINGCFM
  114.     // additional check needed if DragLib is weak-linked
  115.     gHasDragAndDrop = gHasDragAndDrop && (&NewDrag != nil);
  116. #endif
  117.  
  118.     // determine whether the Text Services Manager is available
  119.  
  120.     gHasTextServices = ( Gestalt( gestaltTSMgrVersion, &response ) == noErr );
  121.  
  122.     // register this application with the TSM
  123.  
  124.     if ( gHasTextServices )
  125.     {
  126.         if ( ( err = InitTSMAwareApplication( ) ) != noErr )
  127.             goto cleanup;
  128.     }
  129.  
  130.     // install default drag handlers
  131.  
  132.     if ( gHasDragAndDrop )
  133.     {
  134.         if ( ( err = InstallDragHandlers( ) ) != noErr )
  135.             goto cleanup;
  136.     }
  137.  
  138.     // install the sample object handlers for pictures and sounds
  139.  
  140.     if ((err = WEInstallObjectHandler(kTypePicture, weNewHandler,
  141.                 (UniversalProcPtr) NewWENewObjectProc(HandleNewPicture), nil)) != noErr)
  142.         goto cleanup;
  143.  
  144.     if ((err = WEInstallObjectHandler(kTypePicture, weDisposeHandler,
  145.                 (UniversalProcPtr) NewWEDisposeObjectProc(HandleDisposePicture), nil)) != noErr)
  146.         goto cleanup;
  147.  
  148.     if ((err = WEInstallObjectHandler(kTypePicture, weDrawHandler,
  149.                 (UniversalProcPtr) NewWEDrawObjectProc(HandleDrawPicture), nil)) != noErr)
  150.         goto cleanup;
  151.  
  152.     if ((err = WEInstallObjectHandler(kTypeSound, weNewHandler,
  153.                 (UniversalProcPtr) NewWENewObjectProc(HandleNewSound), nil)) != noErr)
  154.         goto cleanup;
  155.  
  156.     if ((err = WEInstallObjectHandler(kTypeSound, weDrawHandler,
  157.                 (UniversalProcPtr) NewWEDrawObjectProc(HandleDrawSound), nil)) != noErr)
  158.         goto cleanup;
  159.  
  160.     if ((err = WEInstallObjectHandler(kTypeSound, weClickHandler,
  161.                 (UniversalProcPtr) NewWEClickObjectProc(HandleClickSound), nil)) != noErr)
  162.         goto cleanup;
  163.  
  164.     // perform other initialization chores
  165.  
  166.     if ( ( err = InitializeEvents( ) ) != noErr )
  167.         goto cleanup;
  168.  
  169.     if ( ( err = InitializeMenus( ) ) != noErr )
  170.         goto cleanup;
  171.  
  172.     // clear result code
  173.     err = noErr;
  174.  
  175. cleanup:
  176.     if ( err != noErr )
  177.     {
  178.         ErrorAlert( err );
  179.     }
  180.  
  181.     return err;
  182. }
  183.  
  184. void Finalize( void )
  185. {
  186.     // remove drag handlers
  187.  
  188.     if ( gHasDragAndDrop )
  189.     {
  190.         RemoveDragHandlers( );
  191.     }
  192.  
  193.     // notify text services that we're closing down
  194.  
  195.     if ( gHasTextServices )
  196.     {
  197.         CloseTSMAwareApplication( );
  198.     }
  199. }
  200.